package net.maergaiyun.strategy;

import net.maergaiyun.enums.BizCodeEnum;
import net.maergaiyun.exception.BizException;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;

import java.util.Collection;

public class CustomTablePreciseShardingAlgorithm implements PreciseShardingAlgorithm<String> {
    /**
     * @param availableTargetNames 数据源集合
     *                             分库时值为所有分片库的集合 databaseNames
     *                             分表时为对应分片库中所有分片表的集合 tablesNames
     * @param shardingValue        分片属性，包括
     *                             logicTableName 逻辑表
     *                             columnName 分片键（字段）
     *                             value 从SQL中解析出的分片键的值
     * @return
     */
    @Override
    public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<String> shardingValue) {
        // 获取逻辑表
        String targetName = availableTargetNames.iterator().next();
        // 短链码
        String code = shardingValue.getValue();
        // 获取最后一位
        String codeSuffix = code.substring(code.length() - 1);
        return targetName + "_" + codeSuffix;
    }
}
